\chapter{key\_iterator}

class QHash::key\_iterator

QHash::key\_iterator 类为 QHash 和 QMultiHash 的键提供 STL 风格的常量类型迭代器。更多内容...\ref{qhash_key_iterator:detail}

Qt 5.6 中引入该类。


\begin{compactitem}
\item 所有成员列表，包括继承的成员
\item 废弃的成员
\end{compactitem}

\splitLine

\section{公共成员函数}

\begin{tabular}{|l|l|}
\hline
类型	&函数名\\
\hline
const\_iterator& 	base() const\\
\hline
bool 	&operator!=(key\_iterator other) const\\
\hline
const Key \& &	operator*() const\\
\hline
key\_iterator \&& 	operator++()\\
\hline
key\_iterator &	operator++(int)\\
\hline
const Key * &	operator->() const\\
\hline
bool 	&operator==(key\_iterator other) const\\
\hline
\end{tabular}

\splitLine

\section{详细描述}\label{qhash_key_iterator:detail}

除了 operator*() 和 operator->() 返回键而不是值以外，QHash::key\_iterator 基本和 QHash::const\_iterator 相同。

多数情况下应该使用 QHash::iterator 和 QHash::const\_iterator，

通过调用QHash::iterator::key() 可以很容易地取得键：

\begin{cppcode}
for (QHash<int, QString>::const_iterator it = hash.cbegin(), 
end = hash.cend(); it != end; ++it) {
    cout << "The key: " << it.key() << Qt::endl
    cout << "The value: " << it.value() << Qt::endl;
    cout << "Also the value: " << (*it) << Qt::endl;
}
\end{cppcode}

然而，如果想对 QHash 的键应用 STL 算法，就需要一个能解引用出键而不是值
的迭代器。

通过 QHash::key\_iterator 就能直接对一组键应用 STL 算法而不必调用 QHash::keys()，这个函数比较低效，因为它首先要遍历一遍 QHash，然后分配内存创建一个临时的 QList。

\begin{cppcode}
// Inefficient, keys() is expensive
QList<int> keys = hash.keys();
int numPrimes = std::count_if(keys.cbegin(), keys.cend(), isPrimeNumber);
qDeleteAll(hash2.keys());

// Efficient, no memory allocation needed
int numPrimes = std::count_if(hash.keyBegin(), hash.keyEnd(), isPrimeNumber);
qDeleteAll(hash2.keyBegin(), hash2.keyEnd());
\end{cppcode}

QHash::key\_iterator 是 const 的，键是不可能被修改的。

QHash::key\_iterator 的默认构造函数创建一个未初始化的迭代器。必须使用 QHash::keyBegin() 或 QHash::keyEnd() 等 QHash 函数来初始化它。

\textbf{}： 

\begin{warning}
隐式共享容器的迭代器的工作方式和 STL 迭代器不完全相同。当容器的迭代器还处于活动状态时，应该避免拷贝容器。更多信息请参阅隐式共享迭代器问题。
\end{warning}

\begin{seeAlso}
QHash::const\_iterator 和 QHash::iterator。
\end{seeAlso}


\splitLine

\section{成员函数文档}

const\_iterator key\_iterator::base() const

返回该 key\_iterator 基于的底层 const\_iterator。

bool key\_iterator::operator!=(key\_iterator \emph{other}) const

如果 \emph{other} 与本迭代器指向的元素不同，返回 \hl{true}；否则返回 \hl{false}。


\begin{seeAlso}
operator==()。
\end{seeAlso}

const Key \&key\_iterator::operator*() const

返回当前元素的键。

key\_iterator \&key\_iterator::operator++()

前置 \hl{++} 运算符（\hl{++i}）将迭代器向前移动到哈希表中的下一个元素并返回指向新位置元素的迭代器。

对 QHash::keyEnd() 调用该函数将导致未定义结果。



\begin{seeAlso}
operator--()。
\end{seeAlso}


key\_iterator key\_iterator::operator++(int)

这是一个重载函数。

后置 \hl{++} 运算符（\hl{i++}）将迭代器向前移动到哈希表中的下一个元素并返回指向旧位置元素的迭代器。

const Key *key\_iterator::operator->() const

返回指向当前元素键的指针。

bool key\_iterator::operator==(key\_iterator \emph{other}) const

如果 \emph{other} 与本迭代器指向相同的元素，返回 \hl{true}；否则返回 \hl{false}。


\begin{seeAlso}
operator!=()。
\end{seeAlso}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../../master"
%%% End: